<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>

  <body>
    <!-- 2.准备容器 -->
    <div id="app">
      <h1>{{ title }}</h1>
      <button @click="count--">-</button>
      <span>{{ count }}</span>
      <button @click="count++">+</button>
    </div>

    <!-- 1.导入 vue.js -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

    <!-- 3.创建Vue实例对象 -->
    <script>
      const app = new Vue({
        // 容器
        el: "#app",
        // 数据
        data: {
          title: "计数器标题",
          count: 100,
        },

        // 生命周期函数     1.创建    2.挂载   3.更新   4.销毁
        // 1.创建
        beforeCreate() {
          // 数据未初始化
          console.log("🔴创建Vue实例化之前", this.count); // undefined
        },
        created() {
          // 数据初始化完成
          console.log("🔴创建Vue实例化完成", this.count); // 100
        },
        // 2.挂载
        beforeMount() {
          // 数据未挂载
          console.log("🔵挂载DOM之前", document.querySelector("h1")); // <h1>{{title}}</h1>
        },
        mounted() {
          // 数据挂载完成
          console.log("🔵挂载DOM完成", document.querySelector("h1")); // <h1>计算器标题</h1>
        },
        // 3.更新（监听）
        beforeUpdate() {
          // 数据未更新
          console.log(
            "🟢更新DOM之前",
            document.querySelector("span").innerText
          ); // 100
        },
        updated() {
          // 数据更新完成
          console.log(
            "🟢更新DOM完成",
            document.querySelector("span").innerText
          ); // 99
        },
        // 4.销毁
        // 控制台调试 app.$destroy()
        beforeDestroy() {
          // 数据未销毁
          console.log("🐯销毁Vue实例化之前,应用实例还在"); // 99
        },
        destroyed() {
          // 数据销毁完成
          console.log("🐯销毁Vue实例化完成");
        },
      });
    </script>
  </body>
</html>
